// function baz() {
//     this.a = "123";
//     this.bar = bar;
// }

// function bar() {
//     console.log(this);
//     console.log(this.a);
// }
// new baz().bar();

function foo() {
    console.log(this.a);
}
var obj2={
    fun:foo,
    a:"obj2",
}
var obj1={
    a:"obj1",
    obj2:obj2,
    fun:foo,
}

// obj1.obj2.fun();
// obj1.fun();

function bind(fn,obj) {
    return function(){
        return fn.apply(obj,arguments);
    }
}

var obj3 = {
    a:2
}

var bar = bind(foo,obj3);
var b = bar(3);
console.log(b);